let str=[1,2,3,4,5];
console.log(str.push("班"));
//向数组末端添加
console.log(str.unshift("王淼"));
//向数组前端添加
console.log(str.pop());//向后删除
console.log(str.shift());//向前删除

//截取字符串
//1.slice 不改变原数组
console.log(str.slice(0,1));//开始下标，结束下标，不包含最后一个
//2.splice可以改变原数组
console.log(str.splice(0,2));//开始下标，截取的长度
//添加
console.log(str.splice(0,0,6,7,8));//开始下标，0表示删除数量为0，添加的值
//替换
console.log(str.splice(2,2,6,7));//开始下标,替换的个数，替换的值


//concat合并数组
let arr=[1,2,3,4];
let arr1=[5,6,7];
let arr2=arr.concat(arr1);
// console.log(arr2);
let arr3=[...arr,...arr1];
console.log(arr3);

//便利数组
//every 每一项都相同返回true，否则返回false
let obj=[
    {
        name:"zs",
        age:18
    },
    {
        name:"lisi",
        age:20,
    }
]
let parmas={
    name:"zs",
    age:18
}
// let status=obj.every(function(item){
//     return item.name===parmas.name && item.age===parmas.age;
// })


//some 其中一项为真则为true 否则false
let status=obj.some(function(item){
    return item.name===parmas.name && item.age===parmas.age;
})
console.log(status);

//filter过滤数组//返回值为数组
let text=obj.filter(function(item){
    return item;
})
console.log(text);

//forEach循环数组,没有返回值为undefined
let text1=obj.forEach((item)=>{
    return item;
})
console.log(text1)

//map循环数组，有返回值返回值为数组里的每一项
let text2=obj.map((item)=>{
    return item;
})
console.log(text2)

//indexOf()查找数组中是否包含指定元素的下标Number -1通过字符找下标
let numbers=[8,8,7,8,6,2]
console.log(numbers.indexOf(6));

//join 将数组转为字符串默认“,”分隔
console.log(numbers.join("@,*"));

//reduce 求和
let he=numbers.reduce(function(a,b){
    return a+b;
})
console.log(he);

//reverse 数组反转
console.log(numbers.reverse());

//sort数组排序
let newarr=numbers.sort(function(a,b){//升序
    return a-b;
})
console.log(newarr)

//Array.isArray检测是否是数组返回Boolean
// let lis=Array.from(document.querySelectorAll("li"));//类数组将类数组转换为数组Array from();
// console.log(Array.isArray(lis));
// console.log(typeof(lis));//typeof检测数组为object

//Array.of()把一组数据转为数组
console.log(Array.of(1,2,3,4));

//copyWithin(target,startIndex,endIndex)替换数组
//返回值:数组会改变原数组
//参数说明

// target:从该位置开始替换，如果为负数，表示倒数
// startindex:从该位置开始读取数据0，如果为负数，表示倒数
// endIndex：从该位置停止读取数据this.length如果为负数，表示倒数
let arr5=['a','b','c','d',"e","f","g"];
console.log(arr5.copyWithin(1,5))//从下下标为2开始替换
//console.log(arr5.copyWithin(0,2,4));//0表示替换的目标元素,1表示开始位置，2表示结束位置-1，表示从0开始替换替换到下标为1的位置
//console.log(arr5.copyWithin(0,-3,-2));
//console.log(arr5.copyWithin(2));

//find(function(item,index,array))
//查找数组第一个匹配项
//返回值：返回数组第一个匹配项没有匹配值返回Undefined
let arr6=[
    {
        name:"zs",
        age:12,
    },
    {
        name:"lisi",
        age:18,
    },
]
let names=arr6.find(function(item){
    return item.name==="zss"
})
console.log(names)

let ind=arr6.findIndex(function(item){
    return item.name==="zs"
})
console.log(ind)
//fill要填充的值会修改原数组
let arr7=[1,2];
arr7.fill({name:"王淼"});
console.log(arr7)

//flat用于将嵌套的数组拉平flat(num)num拉平的层级
// let arr8=[1,2,[3,4,[5,6,[7,8]]]];
// console.log(arr8.flat(arr8.length));

//for of 用来遍历便利器对象
let arr9=[1,2,3,4,5,6];
for(let key of arr9.keys()){
    console.log(key);
}
for(let key of arr9.values()){
    console.log(key);
}
for(let key of arr9.entries()){
    console.log(key);
}

//defineProperty(obj,属性名，{}，定义新属性或修改原属性)

let obj6={
    name:"zs",
    age:"18"
}
Object.defineProperty(obj6,"address",{
    
        configurable: false, //是否可配置 是否可以删除
        enumerable: true ,  // 是否可枚举  是否可以修改
         value: "河南" ,      //属性的值
        writable: true    // 是否/可编写
})
//delete obj6.name;
obj6.name="zss";
obj6.sex="男";
console.log(obj6)









